package com.cskaoyan.myexception;

/*
    考试成绩必须在0-100分之间，如果有考试成绩不在这个范围之内，则认为成绩异常。

    对于以上的异常，Java语言中显然没有一个对应的“考试分数异常超出范围”的异常，
    因此该异常需要我们自己来定义。

    自己定义异常类，描述我们自己认为的错误，此时就需要使用自定义异常

    自定义异常：
    1. 自定义运行时异常：定义一个类，继承RuntimeException
    2. 自定义编译时异常: 定义一个类，继承Exception

    自定义异常存在的意义，不在异常的抛出，而在异常的处理

 */
public class Demo1 {

    public static void main(String[] args) {

        try {
            // 一堆代码，可能产生数组越界异常，除零异常等等多种运行时异常

            score(-1);
        } catch (MyRuntimeException e) {
            // 专门处理自己认为的分数异常
        } catch (RuntimeException e) {
            e.printStackTrace();
        }
    }


    public static void score(int score) {
        if (score > 100 || score < 0) {
            // 考试成绩异常

            // 抛出自定义运行时异常
            throw new MyRuntimeException("运行时异常：考试成绩异常，score = " + score);

            // 抛出自定义编译时异常
            //throw new MyCheckableException("编译时异常：考试成绩异常，score = " + score);
        }

    }
}

// 自定义运行时异常
class MyRuntimeException extends RuntimeException {

    public MyRuntimeException(String message) {
        super(message);
    }

}

// 自定义编译时异常
class MyCheckableException extends Exception {

    public MyCheckableException(String message) {
        super(message);
    }
}
